using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._GeostatisticalAnalystTools._WorkingwithGeostatisticalLayers
{
    /// <summary>
    /// <para>GA Layer 3D To Multidimensional Raster</para>
    /// <para>Exports a 3D geostatistical layer created using the Empirical Bayesian Kriging 3D tool to a multidimensional Cloud Raster Format (*.crf file) 
    /// raster dataset. Tools in the Multidimensional Analysis toolset of the Image Analyst toolbox are designed to work directly on multidimensional rasters and can identify the 3D nature of the data.</para>
    /// <para>将使用经验贝叶斯克里金法 3D 工具创建的 3D 地统计图层导出为多维云栅格格式（*.crf 文件）
    /// 栅格数据集。Image Analyst 工具箱的多维分析工具集中的工具旨在直接处理多维栅格，并可识别数据的三维性质。</para>
    /// </summary>    
    [DisplayName("GA Layer 3D To Multidimensional Raster")]
    public class GALayer3DToMultidimensionalRaster : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public GALayer3DToMultidimensionalRaster()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_3d_geostat_layer">
        /// <para>Input 3D geostatistical layer</para>
        /// <para>The 3D geostatistical layer representing the model to be exported to a multivariate raster dataset.</para>
        /// <para>表示要导出到多变量栅格数据集的模型的 3D 地统计图层。</para>
        /// </param>
        /// <param name="_out_multidimensional_raster">
        /// <para>Output multidimensional raster dataset</para>
        /// <para>The output raster dataset containing the results of exporting the geostatistical model. The output must be saved as a Cloud Raster Format file (*.crf).</para>
        /// <para>包含导出地统计模型结果的输出栅格数据集。输出必须另存为云栅格格式文件 （*.crf）。</para>
        /// </param>
        public GALayer3DToMultidimensionalRaster(object _in_3d_geostat_layer, object _out_multidimensional_raster)
        {
            this._in_3d_geostat_layer = _in_3d_geostat_layer;
            this._out_multidimensional_raster = _out_multidimensional_raster;
        }
        public override string ToolboxName => "Geostatistical Analyst Tools";

        public override string ToolName => "GA Layer 3D To Multidimensional Raster";

        public override string CallName => "ga.GALayer3DToMultidimensionalRaster";

        public override List<string> AcceptEnvironments => ["cellSize", "extent", "geographicTransformations", "mask", "outputCoordinateSystem", "parallelProcessingFactor", "snapRaster"];

        public override object[] ParameterInfo => [_in_3d_geostat_layer, _out_multidimensional_raster, _cell_size, _explicit_only.GetGPValue(), _min_elev, _max_elev, _elev_interval, _elev_values, _elev_units.GetGPValue(), _output_type.GetGPValue(), _quantile_probability_value, _additional_outputs, _build_transpose.GetGPValue()];

        /// <summary>
        /// <para>Input 3D geostatistical layer</para>
        /// <para>The 3D geostatistical layer representing the model to be exported to a multivariate raster dataset.</para>
        /// <para>表示要导出到多变量栅格数据集的模型的 3D 地统计图层。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input 3D geostatistical layer")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_3d_geostat_layer { get; set; }


        /// <summary>
        /// <para>Output multidimensional raster dataset</para>
        /// <para>The output raster dataset containing the results of exporting the geostatistical model. The output must be saved as a Cloud Raster Format file (*.crf).</para>
        /// <para>包含导出地统计模型结果的输出栅格数据集。输出必须另存为云栅格格式文件 （*.crf）。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output multidimensional raster dataset")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_multidimensional_raster { get; set; }


        /// <summary>
        /// <para>Cell size</para>
        /// <para>The cell size of the output multidimensional raster.</para>
        /// <para>输出多维栅格的像元大小。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Cell size")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _cell_size { get; set; } = null;


        /// <summary>
        /// <para>Enter explicit elevation values</para>
        /// <para><xdoc>
        ///   <para>Specifies whether elevations will be provided as an explicit list or an iterator will be used. Each elevation will be represented by a dimension in the output multidimensional raster.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Elevation values will be provided as a list.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Elevation values will be provided using an iterator. This is the default.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是以显式列表的形式提供高程，还是使用迭代器。每个高程将由输出多维栅格中的一个维度表示。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 高程值将以列表形式提供。</bullet_item><para/>
        ///     <bullet_item>未选中—将使用迭代器提供高程值。这是默认设置。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Enter explicit elevation values")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _explicit_only_value _explicit_only { get; set; } = _explicit_only_value._false;

        public enum _explicit_only_value
        {
            /// <summary>
            /// <para>EXPLICIT_VALUES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("EXPLICIT_VALUES")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_EXPLICIT_VALUES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_EXPLICIT_VALUES")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Minimum elevation</para>
        /// <para>The minimum elevation that will be used to start the iteration.</para>
        /// <para>将用于开始迭代的最小高程。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Minimum elevation")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double? _min_elev { get; set; } = null;


        /// <summary>
        /// <para>Maximum elevation</para>
        /// <para>The maximum elevation that will be used to stop the iteration.</para>
        /// <para>将用于停止迭代的最大高程。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Maximum elevation")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double? _max_elev { get; set; } = null;


        /// <summary>
        /// <para>Elevation interval</para>
        /// <para>The increment that the elevation will increase with each iteration.</para>
        /// <para>每次迭代时提升将增加的增量。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Elevation interval")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double? _elev_interval { get; set; } = null;


        /// <summary>
        /// <para>Elevation values</para>
        /// <para>The elevation values to export.</para>
        /// <para>要导出的高程值。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Elevation values")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public List<object> _elev_values { get; set; } = null;


        /// <summary>
        /// <para>Elevation units</para>
        /// <para><xdoc>
        ///   <para>Specifies the measurement unit of the elevation values.</para>
        ///   <bulletList>
        ///     <bullet_item>Inch—Elevation values are in inches.</bullet_item><para/>
        ///     <bullet_item>Foot—Elevation values are in feet.</bullet_item><para/>
        ///     <bullet_item>Yard—Elevation values are in yards.</bullet_item><para/>
        ///     <bullet_item>US mile—Elevation values are in U.S. miles.</bullet_item><para/>
        ///     <bullet_item>Nautical mile—Elevation values are in nautical miles.</bullet_item><para/>
        ///     <bullet_item>Millimeter—Elevation values are in millimeters.</bullet_item><para/>
        ///     <bullet_item>Centimeter—Elevation values are in centimeters.</bullet_item><para/>
        ///     <bullet_item>Decimeter—Elevation values are in decimeters.</bullet_item><para/>
        ///     <bullet_item>Meter—Elevation values are in meters.</bullet_item><para/>
        ///     <bullet_item>Kilometer—Elevation values are in kilometers.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定高程值的测量单位。</para>
        ///   <bulletList>
        ///     <bullet_item>英寸 - 高程值以英寸为单位。</bullet_item><para/>
        ///     <bullet_item>英尺 - 高程值以英尺为单位。</bullet_item><para/>
        ///     <bullet_item>码 - 高程值以码为单位。</bullet_item><para/>
        ///     <bullet_item>美英里—高程值以美英里为单位。</bullet_item><para/>
        ///     <bullet_item>海里—高程值以海里为单位。</bullet_item><para/>
        ///     <bullet_item>毫米 - 高程值以毫米为单位。</bullet_item><para/>
        ///     <bullet_item>厘米 - 高程值以厘米为单位。</bullet_item><para/>
        ///     <bullet_item>分米 - 高程值以分米为单位。</bullet_item><para/>
        ///     <bullet_item>米 - 高程值以米为单位。</bullet_item><para/>
        ///     <bullet_item>千米 - 高程值以千米为单位。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Elevation units")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _elev_units_value _elev_units { get; set; } = _elev_units_value._METER;

        public enum _elev_units_value
        {
            /// <summary>
            /// <para>Inch</para>
            /// <para>Inch—Elevation values are in inches.</para>
            /// <para>英寸 - 高程值以英寸为单位。</para>
            /// </summary>
            [Description("Inch")]
            [GPEnumValue("INCH")]
            _INCH,

            /// <summary>
            /// <para>Foot</para>
            /// <para>Foot—Elevation values are in feet.</para>
            /// <para>英尺 - 高程值以英尺为单位。</para>
            /// </summary>
            [Description("Foot")]
            [GPEnumValue("FOOT")]
            _FOOT,

            /// <summary>
            /// <para>Yard</para>
            /// <para>Yard—Elevation values are in yards.</para>
            /// <para>码 - 高程值以码为单位。</para>
            /// </summary>
            [Description("Yard")]
            [GPEnumValue("YARD")]
            _YARD,

            /// <summary>
            /// <para>US mile</para>
            /// <para>US mile—Elevation values are in U.S. miles.</para>
            /// <para>美英里—高程值以美英里为单位。</para>
            /// </summary>
            [Description("US mile")]
            [GPEnumValue("MILE_US")]
            _MILE_US,

            /// <summary>
            /// <para>Nautical mile</para>
            /// <para>Nautical mile—Elevation values are in nautical miles.</para>
            /// <para>海里—高程值以海里为单位。</para>
            /// </summary>
            [Description("Nautical mile")]
            [GPEnumValue("NAUTICAL_MILE")]
            _NAUTICAL_MILE,

            /// <summary>
            /// <para>Millimeter</para>
            /// <para>Millimeter—Elevation values are in millimeters.</para>
            /// <para>毫米 - 高程值以毫米为单位。</para>
            /// </summary>
            [Description("Millimeter")]
            [GPEnumValue("MILLIMETER")]
            _MILLIMETER,

            /// <summary>
            /// <para>Centimeter</para>
            /// <para>Centimeter—Elevation values are in centimeters.</para>
            /// <para>厘米 - 高程值以厘米为单位。</para>
            /// </summary>
            [Description("Centimeter")]
            [GPEnumValue("CENTIMETER")]
            _CENTIMETER,

            /// <summary>
            /// <para>Decimeter</para>
            /// <para>Decimeter—Elevation values are in decimeters.</para>
            /// <para>分米 - 高程值以分米为单位。</para>
            /// </summary>
            [Description("Decimeter")]
            [GPEnumValue("DECIMETER")]
            _DECIMETER,

            /// <summary>
            /// <para>Meter</para>
            /// <para>Meter—Elevation values are in meters.</para>
            /// <para>米 - 高程值以米为单位。</para>
            /// </summary>
            [Description("Meter")]
            [GPEnumValue("METER")]
            _METER,

            /// <summary>
            /// <para>Kilometer</para>
            /// <para>Kilometer—Elevation values are in kilometers.</para>
            /// <para>千米 - 高程值以千米为单位。</para>
            /// </summary>
            [Description("Kilometer")]
            [GPEnumValue("KILOMETER")]
            _KILOMETER,

        }

        /// <summary>
        /// <para>Output type</para>
        /// <para><xdoc>
        ///   <para>Specifies the primary output type of the output multidimensional raster. The Additional output types parameter can be used to specify additional variables in the output multidimensional raster.</para>
        ///   <para>For more information, see What output surface types can the interpolation models generate?</para>
        ///   <bulletList>
        ///     <bullet_item>Prediction—A multidimensional raster of predicted values. This is the default.</bullet_item><para/>
        ///     <bullet_item>Prediction standard error—A multidimensional raster of standard errors of prediction.</bullet_item><para/>
        ///     <bullet_item>Probability—A multidimensional raster predicting the probability that a threshold is exceeded.</bullet_item><para/>
        ///     <bullet_item>Quantile—A multidimensional raster predicting the quantile of the predicted value.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定输出多维栅格的主要输出类型。其他输出类型参数可用于在输出多维栅格中指定其他变量。</para>
        ///   <para>有关详细信息，请参阅插值模型可以生成哪些输出曲面类型？</para>
        ///   <bulletList>
        ///     <bullet_item>预测 - 预测值的多维栅格。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>预测标准误差 - 预测标准误差的多维栅格。</bullet_item><para/>
        ///     <bullet_item>概率 - 用于预测超过阈值的概率的多维栅格。</bullet_item><para/>
        ///     <bullet_item>分位数 - 预测预测值分位数的多维栅格。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output type")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _output_type_value _output_type { get; set; } = _output_type_value._PREDICTION;

        public enum _output_type_value
        {
            /// <summary>
            /// <para>Prediction</para>
            /// <para>Prediction—A multidimensional raster of predicted values. This is the default.</para>
            /// <para>预测 - 预测值的多维栅格。这是默认设置。</para>
            /// </summary>
            [Description("Prediction")]
            [GPEnumValue("PREDICTION")]
            _PREDICTION,

            /// <summary>
            /// <para>Prediction standard error</para>
            /// <para>Prediction standard error—A multidimensional raster of standard errors of prediction.</para>
            /// <para>预测标准误差 - 预测标准误差的多维栅格。</para>
            /// </summary>
            [Description("Prediction standard error")]
            [GPEnumValue("PREDICTION_STANDARD_ERROR")]
            _PREDICTION_STANDARD_ERROR,

            /// <summary>
            /// <para>Probability</para>
            /// <para>Probability—A multidimensional raster predicting the probability that a threshold is exceeded.</para>
            /// <para>概率 - 用于预测超过阈值的概率的多维栅格。</para>
            /// </summary>
            [Description("Probability")]
            [GPEnumValue("PROBABILITY")]
            _PROBABILITY,

            /// <summary>
            /// <para>Quantile</para>
            /// <para>Quantile—A multidimensional raster predicting the quantile of the predicted value.</para>
            /// <para>分位数 - 预测预测值分位数的多维栅格。</para>
            /// </summary>
            [Description("Quantile")]
            [GPEnumValue("QUANTILE")]
            _QUANTILE,

            /// <summary>
            /// <para>CONDITION_NUMBER</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("CONDITION_NUMBER")]
            [GPEnumValue("CONDITION_NUMBER")]
            _CONDITION_NUMBER,

            /// <summary>
            /// <para>STANDARD_ERROR_INDICATORS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("STANDARD_ERROR_INDICATORS")]
            [GPEnumValue("STANDARD_ERROR_INDICATORS")]
            _STANDARD_ERROR_INDICATORS,

        }

        /// <summary>
        /// <para>Quantile or probability threshold value</para>
        /// <para>If Output type is set to Quantile, use this parameter to enter the requested quantile. If Output type is set to Probability, use this parameter to enter the requested threshold value, and the probability that the threshold is exceeded will be calculated. Subtract this value from one to get the probability that the threshold is not exceeded.</para>
        /// <para>如果“输出类型”设置为“分位数”，请使用此参数输入请求的分位数。如果“输出类型”为“概率”，则使用该参数输入请求的阈值，将计算超过阈值的概率。从 1 中减去此值，得到未超过阈值的概率。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Quantile or probability threshold value")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double? _quantile_probability_value { get; set; } = null;


        /// <summary>
        /// <para>Additional output types</para>
        /// <para><xdoc>
        ///   <para>Specifies the output type and quantile or probability value for each additional output type. If multiple output types are provided, the output raster will be a multivariate raster dataset with a different variable for each output type.</para>
        ///   <para>For more information, see What output surface types can the interpolation models generate?</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定每个附加输出类型的输出类型和分位数或概率值。如果提供了多个输出类型，则输出栅格将为多变量栅格数据集，每个输出类型具有不同的变量。</para>
        ///   <para>有关详细信息，请参阅插值模型可以生成哪些输出曲面类型？</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Additional output types")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _additional_outputs { get; set; } = null;


        /// <summary>
        /// <para>Build multidimensional transpose</para>
        /// <para><xdoc>
        ///   <para>Specifies whether multidimensional transposes will be built on the output multidimensional raster.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Multidimensional transposes will be built on the output multidimensional raster.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Multidimensional transposes will not be built on the output multidimensional raster. This is the default.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否在输出多维栅格上构建多维转置。</para>
        ///   <bulletList>
        ///     <bullet_item>选中—将在输出多维栅格上构建多维转置。</bullet_item><para/>
        ///     <bullet_item>未选中 - 不会在输出多维栅格上构建多维转置。这是默认设置。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Build multidimensional transpose")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _build_transpose_value _build_transpose { get; set; } = _build_transpose_value._false;

        public enum _build_transpose_value
        {
            /// <summary>
            /// <para>BUILD_TRANSPOSE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("BUILD_TRANSPOSE")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>DO_NOT_BUILD_TRANSPOSE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("DO_NOT_BUILD_TRANSPOSE")]
            [GPEnumValue("false")]
            _false,

        }

        public GALayer3DToMultidimensionalRaster SetEnv(object cellSize = null, object extent = null, object geographicTransformations = null, object mask = null, object outputCoordinateSystem = null, object parallelProcessingFactor = null, object snapRaster = null)
        {
            base.SetEnv(cellSize: cellSize, extent: extent, geographicTransformations: geographicTransformations, mask: mask, outputCoordinateSystem: outputCoordinateSystem, parallelProcessingFactor: parallelProcessingFactor, snapRaster: snapRaster);
            return this;
        }

    }

}